package eva.savant.businessobject.cg;

import eva.savant.businessobject.vt.Venta;
import eva.savant.businessobject.gl.Persona;
import javax.persistence.*;
import java.math.BigDecimal;
import java.util.Date;
import java.util.Collection;
import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;

@Table(name="CG_DOCUMENTO")
@javax.persistence.Entity(name = "cg.Documento")
public class Documento extends eva.savant.businessobject.Entity {

    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ID_DOCUMENTO", length = 10, nullable = false)
    private Integer id; //ID Documento

    @ManyToOne
    @JoinColumn(name = "ID_PERSONA", nullable = false)
    private Persona persona; //ID Persona

    @ManyToOne
    @JoinColumn(name = "ID_ASIENTO", nullable = true)
    private Asiento asiento; //ID Asiento Contable

    @Basic
    @Column(name = "ESTADO", length = 2, nullable = true)
    private String estado; //Estado

    @Basic
    @Column(name = "REFERENCIA", length = 30, nullable = true)
    private String referencia; //Referencia

    @Basic
    @Column(name = "DESCRIPCION", length = 150, nullable = false)
    private String descripcion; //Descripcion Cuentas por Cobrar

    @Basic
    @Column(name = "SALDO", length = 14, precision = 4, nullable = false)
    private BigDecimal saldo; //Saldo Deuda

    @Basic
    @Column(name = "IMPORTE", length = 14, precision = 4, nullable = false)
    private BigDecimal importe; //Monto Deuda

    @Basic @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "CREACION", length = 19, nullable = false)
    private Date creacion; //Fecha Creacion

    @Basic @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "ULTIMOPAGO", length = 19, nullable = true)
    private Date ultimopago; //Fecha Ultimo Pago

    @Basic @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "VENCIMIENTO", length = 19, nullable = false)
    private Date vencimiento; //Fecha Vencimiento

    @Basic
    @Column(name = "TIPO", length = 10, nullable = false)
    private String tipo; //Tipo Documento { CXC CXP}

    @OneToMany
    (mappedBy = "documento", cascade = CascadeType.ALL, orphanRemoval = true) @LazyCollection(LazyCollectionOption.FALSE)
    private Collection<DocumentoDetalle> lsDocumentoDetalle;

    @OneToMany
    (mappedBy = "documento")
    private Collection<Venta> lsVenta;


    public Documento(Integer id, Persona persona, Asiento asiento, String estado, String referencia, String descripcion, BigDecimal saldo, BigDecimal importe, Date creacion, Date ultimopago, Date vencimiento, String tipo, Integer operacionId, String sociedadId, Integer usuarioId) {

        this.id= id;

        this.persona= persona;

        this.asiento= asiento;

        this.estado= estado;

        this.referencia= referencia;

        this.descripcion= descripcion;

        this.saldo= saldo;

        this.importe= importe;

        this.creacion= creacion;

        this.ultimopago= ultimopago;

        this.vencimiento= vencimiento;

        this.tipo= tipo;

        this.operacionId= operacionId;

        this.sociedadId= sociedadId;

        this.usuarioId= usuarioId;

    }

    public Documento() {

    }


    public Integer getId() {
    
        return id;
    }
    
    public void setId(Integer id) {
    
        this.id = id;
    }

    public Persona getPersona() {
    
        return persona;
    }
    
    public void setPersona(Persona persona) {
    
        this.persona = persona;
    }

    public Asiento getAsiento() {
    
        return asiento;
    }
    
    public void setAsiento(Asiento asiento) {
    
        this.asiento = asiento;
    }

    public String getEstado() {
    
        return estado;
    }
    
    public void setEstado(String estado) {
    
        this.estado = estado;
    }

    public String getReferencia() {
    
        return referencia;
    }
    
    public void setReferencia(String referencia) {
    
        this.referencia = referencia;
    }

    public String getDescripcion() {
    
        return descripcion;
    }
    
    public void setDescripcion(String descripcion) {
    
        this.descripcion = descripcion;
    }

    public BigDecimal getSaldo() {
    
        return saldo;
    }
    
    public void setSaldo(BigDecimal saldo) {
    
        this.saldo = saldo;
    }

    public BigDecimal getImporte() {
    
        return importe;
    }
    
    public void setImporte(BigDecimal importe) {
    
        this.importe = importe;
    }

    public Date getCreacion() {
    
        return creacion;
    }
    
    public void setCreacion(Date creacion) {
    
        this.creacion = creacion;
    }

    public Date getUltimopago() {

        return ultimopago;
    }

    public void setUltimopago(Date ultimopago) {

        this.ultimopago = ultimopago;
    }

    public Date getVencimiento() {
    
        return vencimiento;
    }
    
    public void setVencimiento(Date vencimiento) {
    
        this.vencimiento = vencimiento;
    }

    public String getTipo() {
    
        return tipo;
    }
    
    public void setTipo(String tipo) {
    
        this.tipo = tipo;
    }

    public Collection<DocumentoDetalle> getLsDocumentoDetalle() {
    
        return lsDocumentoDetalle;
    }
    
    public void setLsDocumentoDetalle(Collection<DocumentoDetalle> lsDocumentoDetalle) {
    
        this.lsDocumentoDetalle = lsDocumentoDetalle;
    }

    public Collection<Venta> getLsVenta() {
    
        return lsVenta;
    }
    
    public void setLsVenta(Collection<Venta> lsVenta) {
    
        this.lsVenta = lsVenta;
    }

}
